<?php
defined( '_JEXEC' ) or die;

jimport('joomla.application.component.modellist');

class PricerUpdaterModelVendorSynonyms extends JModelList {

	protected $msg;

	// Конструктор
	public function __construct($config = array()) {
		if (empty($config['filter_fields'])) {
			$config['filter_fields'] = array(
				'id', 'a.id',
				'title', 'a.title',
				'checked_out', 'a.checked_out',
				'checked_out_time', 'a.checked_out_time',
				'state', 'a.state',
				'vendor_id', 'a.vendor_id', 'vendor_title',
				'access', 'a.access', 'access_level',
				'created', 'a.created',
				'created_by', 'a.created_by',
				'publish_up', 'a.publish_up',
				'publish_down', 'a.publish_down',
			);
		}
		parent::__construct($config);
	}

	// Получаем свойства элементов списка
	public function getItems() {
		// Получаем изначальные свойства элементов списка
		$items = parent::getItems();

		// Добавляем ссылки для редактирования
		foreach ($items as &$item) {
			$item->url = 'index.php?option=com_pricerupdater&amp;task=vendorsynonym.edit&amp;id=' . $item->id;
		}

		// Возвращаем результат
		return $items;
	}

	// Создаем запрос к базе данных
	public function getListQuery() {

		// Инициализируем переменные
		$db = $this->getDbo();
		$query = $db->getQuery(true);

		// Указываем поля запроса
		$query->select(
			$this->getState(
				'list.select',
				'a.id, a.title, a.checked_out, a.checked_out_time, a.vendor_id' .
				', a.state, a.access, a.created, a.created_by, a.publish_up, a.publish_down'
			)
		);

		// Указываем таблицу запроса
		$query->from($db->quoteName('#__pricer_vendor_synonym').' AS a');

		// Join over the language
		//$query->select('l.title AS language_title');
		//$query->join('LEFT', $db->quoteName('#__languages').' AS l ON l.lang_code = a.language');

		// Join over the users for the checked out user.
		$query->select('uc.name AS editor');
		$query->join('LEFT', '#__users AS uc ON uc.id=a.checked_out');

		// Join over the asset groups.
		$query->select('ag.title AS access_level');
		$query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access');

		// Join over the categories.
		$query->select('v.title AS vendor_title');
		$query->join('LEFT', '#__pricer_vendor AS v ON v.id = a.vendor_id');

		// Join over the users for the author.
		$query->select('ua.name AS author_name');
		$query->join('LEFT', '#__users AS ua ON ua.id = a.created_by');

		// Filter by access level.
//		if ($access = $this->getState('filter.access')) {
//			$query->where('a.access = ' . (int) $access);
//		}

		// Join over the users for the checked out user.
//		$query->select('uc.name AS editor');
//		$query->join('LEFT', '#__users AS uc ON uc.id=a.checked_out');

		// Добавляем в запрос фильтр по состоянию
		$published = $this->getState('filter.state');
		if (is_numeric($published)) {
			$query->where('a.state = '.(int) $published);
		} elseif ($published === '') {
			$query->where('(a.state IN (0, 1))');
		}

		// Добавляем в запрос фильтр по производителю
		$vendorId = $this->getState('filter.vendor_id');
		if (is_numeric($vendorId)) {
			$query->where('a.vendor_id = '.(int) $vendorId);
		}

		// Добавляем в запрос фильтр по строке поиска
		$search = $this->getState('filter.search');
		if (!empty($search)) {
			if (stripos($search, 'id:') === 0) {
				$query->where('a.id = '.(int) substr($search, 3));
			} else {
				$search = $db->Quote('%'.$db->escape($search, true).'%');
				$query->where('a.title LIKE '.$search);
			}
		}

		// Добавляем сортировку
		$orderCol = $this->getState('list.ordering');
		$orderDirn = $this->getState('list.direction');

		if ($orderCol != '') {
			$query->order($db->getEscaped($orderCol.' '.$orderDirn));
		}

		return $query;
	}

	// Получает информацию о фильтрах
	protected function populateState($ordering = null, $direction = null) {

		// Инициализируем переменные
		$app = JFactory::getApplication('administrator');

		// Загружаем фильтр по состоянию
		$state = $this->getUserStateFromRequest($this->context.'.filter.state', 'filter_state', '', 'string');
		$this->setState('filter.state', $state);

		// Загружаем фильтр по производителю
		$vendorId = $this->getUserStateFromRequest($this->context.'.filter.vendor_id', 'filter_vendor_id', '');
		$this->setState('filter.vendor_id', $vendorId);

		// Загружаем фильтр по строке поиска
		$search = $this->getUserStateFromRequest($this->context.'.filter.search', 'filter_search');
		$this->setState('filter.search', $search);

//		$language = $this->getUserStateFromRequest($this->context.'.filter.language', 'filter_language', '');
//		$this->setState('filter.language', $language);

		// Load the parameters.
//		$params = JComponentHelper::getParams('com_banners');
//		$this->setState('params', $params);

		// List state information.
		parent::populateState('a.title', 'asc');
	}

	// Возвращает список категорий
	public function getVendors() {

		// Инициализируем переменные
		$db =& JFactory::getDBO();

		// Загружаем категории из базы
		$query = $db->getQuery(true);
		$query->select('id, title, state');
		$query->from('#__pricer_vendor');
		$query->order('title');
		$db->setQuery($query);
		$vendors = $db->loadObjectList();

		// Возвращаем результат
		return $vendors;
	}

	// Сохраняет изменения в синонимах категорий
	public function save($synonyms, $vendors) {

		// Инициализируем переменные
		$db =& JFactory::getDBO();

		// Применяем изменения по циклу
		for($i = 0; $i<sizeof($synonyms); $i++) {
			$query = $db->getQuery(true);
			$query->update('#__pricer_vendor_synonym');
			$query->set("vendor_id=$vendors[$i]");
			$query->where("id=$synonyms[$i]");
			$db->setQuery($query);
			$db->query();
		}
		return true;
	}

	// Возвращает строку сообщений
	public function getMsg() {
		return $this->msg;
	}

	// Добавляет сообщение
	protected function addMsg($msg) {
		$this->msg .= "{$msg}<br/>\n";
	}
}
